﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Business.Entities;
using Business.Logic;

namespace UI.Desktop
{
    public partial class CursosDesktop : ApplicationForm
    {
        private Curso _CursoActual;

        private string _Docente;

        Curso CursoActual { get { return _CursoActual; } set { _CursoActual = value; } }

        string Docente { get { return _Docente; } set { _Docente = value; } }

        public CursosDesktop()
        {
            InitializeComponent();
            _CursoActual = new Curso();
        }

        #region Consutructores

        public CursosDesktop(ModoForm modo)
            : this()
        {
            this.Modo = modo;
            MapearDeDatos();
        }

        public CursosDesktop(ModoForm modo, int id): this()
        {
            this.Modo = modo;
            CursoLogic curLog = new CursoLogic();
            CursoActual = curLog.GetOne(id);
            MapearDeDatos();
        }

        #endregion

        #region Métodos

        protected override void GuardarCambios()
        {
            try
            {
                CursoLogic log = new CursoLogic();
                if (this.Modo != ModoForm.Baja)
                {
                    log.Save(CursoActual);
                    if(this.Modo==ModoForm.Alta)
                        log.AsignarDocente(Docente, CursoActual);
                }
                else
                    log.Delete(CursoActual);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        protected override bool Validar()
        {
            ValidacionesEspeciales val = new ValidacionesEspeciales();
            string mensaje = "";
            if (txtAnio.Text == "")
                mensaje += "- Debe completar el campo Año" + "\n";
            if (txtCupo.Text == "")
                mensaje += "- Debe completar el campo Cupo" + "\n";

            if (this.cmbComision.Text == "")
                mensaje += "- Debe elegir una comisión\n";
            if (this.cmbEspecialidad.Text == "")
                mensaje += "- Debe elegir una especialidad\n";
            if (this.cmbMateria.Text == "")
                mensaje += "- Debe elegir una especialidad\n";
            if (this.cmbPlan.Text == "")
                mensaje += "- Debe elegir un plan";
            if (this.cmbDocente.Text == "")
                mensaje += "- Debe elegir un docente";

            if (mensaje == "")
                return true;
            else
            {
                MessageBox.Show(mensaje, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return false;
            }
        }

        protected override void MapearDeDatos()
        {
            
            CursoLogic log = new CursoLogic();
            if (this.Modo == ModoForm.Alta || this.Modo == ModoForm.Modifica)
            {
                
                this.cmbEspecialidad.DataSource = log.GetEspecialidad();
                if (this.Modo == ModoForm.Modifica)
                {
                    txtID.Text = CursoActual.ID.ToString();
                    this.txtCupo.Text = CursoActual.Cupo.ToString();
                    this.txtAnio.Text = CursoActual.AnioCalendario.ToString();
                    this.cmbEspecialidad.Text = log.GetDescripEspecialidad(CursoActual.ID);
                    this.cmbPlan.Text = log.GetDescripPlan(CursoActual.ID); ;
                    this.cmbMateria.Text = log.GetDescripMateria(CursoActual.ID);
                    this.cmbComision.Text = log.GetDescripComision(CursoActual.ID);
                }
            }
            else
            {
                this.txtID.Text = CursoActual.ID.ToString();
                txtID.ReadOnly = true;
                this.txtCupo.Text = CursoActual.Cupo.ToString();
                txtCupo.ReadOnly = true;
                this.txtAnio.Text = CursoActual.AnioCalendario.ToString();
                txtAnio.ReadOnly = true;
                this.cmbEspecialidad.Text = log.GetDescripEspecialidad(CursoActual.ID);
                cmbEspecialidad.Enabled = false;
                this.cmbPlan.Text = log.GetDescripPlan(CursoActual.ID); ;
                cmbPlan.Enabled = false;
                this.cmbMateria.Text = log.GetDescripMateria(CursoActual.ID);
                cmbMateria.Enabled = false;
                this.cmbComision.Text= log.GetDescripComision(CursoActual.ID);
                cmbComision.Enabled = false;
                btnOkPlan.Enabled = false;
                btnOkEspecialidad.Enabled = false;
            }
            switch (this.Modo)
            { 
                case ModoForm.Alta:
                    btnAceptar.Text = "Aceptar";
                    break;
                case ModoForm.Baja:
                    btnAceptar.Text = "Eliminar";
                    break;
                case ModoForm.Consulta:
                    btnAceptar.Text = "Aceptar";
                    break;
                case ModoForm.Modifica:
                    btnAceptar.Text = "Guardar cambios";
                    break;
            }
        }

        protected override void MapearADatos()
        {
            try
            {
                switch (Modo)
                {
                    case ModoForm.Alta:
                        CursoLogic curLog = new CursoLogic();
                        Curso curAct = new Curso();
                        curAct.IDMateria = curLog.GetIdMateria(cmbMateria.SelectedValue.ToString());
                        curAct.IDComision = curLog.GetIdComision(cmbComision.SelectedValue.ToString());
                        curAct.Cupo = int.Parse(txtCupo.Text);
                        curAct.AnioCalendario = int.Parse(txtAnio.Text);
                        curAct.State = Curso.States.New;
                        CursoActual = curAct;
                        string DocenteAct= cmbDocente.SelectedValue.ToString();
                        string[] split = DocenteAct.Split(new char [] {' ', '-'});
                        Docente = split[0];
                        break;
                    case ModoForm.Baja:
                        CursoActual.ID = int.Parse(txtID.Text);
                        CursoActual.State = Curso.States.Deleted;
                        break;
                    case ModoForm.Consulta:
                        CursoActual.State = Curso.States.Unmodified;
                        break;
                    case ModoForm.Modifica:
                        CursoLogic log = new CursoLogic();
                        CursoActual.IDMateria = log.GetIdMateria(cmbMateria.SelectedValue.ToString());//ACA ESTA EL ERROR
                        CursoActual.IDComision = log.GetIdComision(cmbComision.SelectedValue.ToString());
                        CursoActual.Cupo = int.Parse(txtCupo.Text);
                        CursoActual.AnioCalendario = int.Parse(txtAnio.Text);
                        CursoActual.State = Curso.States.Modified;
                        break;
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message,"Información",MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }



        #endregion

        #region Eventos

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (this.Modo != ModoForm.Consulta)
            {
                if (Validar() != false)
                {
                    MapearADatos();
                    GuardarCambios();
                    switch (Modo)
                    {
                        case ModoForm.Alta:
                            MessageBox.Show("El curso fue registrado correctamente", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                            break;
                        case ModoForm.Modifica:
                            MessageBox.Show("El curso fue modificado correctamente", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                            this.Close();
                            break;
                        case ModoForm.Baja:
                            MessageBox.Show("El curso fue eliminado correctamente", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                            this.Close();
                            break;
                    }
                    this.btnVolver.Text = "Cerrar";
                    this.Close();
                }
            }
            else
            {
                MapearDeDatos();
                this.Close();
            }
        }

        private void btnOkEspecialidad_Click(object sender, EventArgs e)
        {
            CursoLogic log = new CursoLogic();
            int id_esp = log.GetIdEsp(cmbEspecialidad.SelectedValue.ToString()) ;
            this.cmbPlan.DataSource = log.GetPlan(id_esp);
        }
        
        private void btnOkPlan_Click(object sender, EventArgs e)
        {
            CursoLogic log = new CursoLogic();
            int id_plan = log.GetIdPlan(cmbPlan.SelectedValue.ToString());
            this.cmbComision.DataSource = log.GetComision(id_plan);
            this.cmbMateria.DataSource = log.GetMateria(id_plan);
            this.cmbDocente.DataSource = log.GetDocentes(id_plan);
        }

        private void btnVolver_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        #endregion

        
    }
}
